#!/bin/bash

# 文件存储服务 Linux 部署脚本
# 适用于 Ubuntu/Debian/CentOS 系统

echo "🚀 开始部署文件存储服务..."

# 检测操作系统
if [ -f /etc/os-release ]; then
    . /etc/os-release
    OS=$NAME
    VER=$VERSION_ID
else
    echo "无法检测操作系统版本"
    exit 1
fi

echo "检测到操作系统: $OS $VER"

# 创建应用目录
APP_DIR="/opt/imagestorage"
echo "📁 创建应用目录: $APP_DIR"
sudo mkdir -p $APP_DIR

# 创建文件存储目录
if [ ! -d "/data/files" ]; then
    echo "📁 创建文件存储目录: /data/files"
    sudo mkdir -p /data/files
    sudo chmod 755 /data/files
fi

# 安装 Node.js (如果未安装)
if ! command -v node &> /dev/null; then
    echo "📦 安装 Node.js..."
    
    if [[ "$OS" == *"Ubuntu"* ]] || [[ "$OS" == *"Debian"* ]]; then
        # Ubuntu/Debian
        curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
        sudo apt-get install -y nodejs
    elif [[ "$OS" == *"CentOS"* ]] || [[ "$OS" == *"Red Hat"* ]]; then
        # CentOS/RHEL
        curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
        sudo yum install -y nodejs
    else
        echo "不支持的操作系统，请手动安装 Node.js"
        exit 1
    fi
else
    echo "✅ Node.js 已安装: $(node --version)"
fi

# 安装 PM2 (进程管理器)
if ! command -v pm2 &> /dev/null; then
    echo "📦 安装 PM2..."
    sudo npm install -g pm2
else
    echo "✅ PM2 已安装: $(pm2 --version)"
fi

# 复制项目文件
echo "📋 复制项目文件..."
sudo cp -r . $APP_DIR/
cd $APP_DIR

# 安装依赖
echo "📦 安装项目依赖..."
npm install

# 创建 systemd 服务文件
echo "🔧 创建系统服务..."
sudo tee /etc/systemd/system/imagestorage.service > /dev/null <<EOF
[Unit]
Description=Image Storage Service
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=$APP_DIR
ExecStart=/usr/bin/node server.js
Restart=always
RestartSec=10
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target
EOF

# 重新加载 systemd
sudo systemctl daemon-reload

# 启用并启动服务
echo "🚀 启动服务..."
sudo systemctl enable imagestorage
sudo systemctl start imagestorage

# 检查服务状态
echo "📊 检查服务状态..."
sudo systemctl status imagestorage --no-pager

# 配置防火墙 (如果启用)
if command -v ufw &> /dev/null; then
    echo "🔥 配置防火墙 (UFW)..."
    sudo ufw allow 8004
elif command -v firewall-cmd &> /dev/null; then
    echo "🔥 配置防火墙 (firewalld)..."
    sudo firewall-cmd --permanent --add-port=8004/tcp
    sudo firewall-cmd --reload
fi

echo ""
echo "✅ 部署完成！"
echo "📁 文件存储目录: /data/files"
echo "🌐 服务地址: http://$(hostname -I | awk '{print $1}'):8004"
echo "📋 服务管理命令:"
echo "   启动: sudo systemctl start imagestorage"
echo "   停止: sudo systemctl stop imagestorage"
echo "   重启: sudo systemctl restart imagestorage"
echo "   状态: sudo systemctl status imagestorage"
echo "   日志: sudo journalctl -u imagestorage -f"
